"""
Django项目设置。

由'django-admin startproject'命令生成，使用Django 5.0.7。

更多关于此文件的信息，请访问:
https://docs.djangoproject.com/en/5.0/topics/settings/

完整的设置列表及其值，请访问:
https://docs.djangoproject.com/en/5.0/ref/settings/
"""

from pathlib import Path

# 项目中的路径构建方式如下：BASE_DIR / '子目录'。
BASE_DIR = Path(__file__).resolve().parent.parent

# 快速启动开发设置 - 不适合生产环境
# 详细信息，请访问 https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/

# 安全警告：请将生产环境中使用的密钥保密！
SECRET_KEY = "django-insecure-nvo%g-c4z0d2k9&a&!_udq+y1wr_oaj6=tsw0j%*yz9o(p%$=s"

# 安全警告：生产环境中请勿打开调试模式！
DEBUG = True

# 允许的主机列表为空。

# 应用程序定义

INSTALLED_APPS = [
    "django.contrib.admin",  # Django 管理后台应用，提供了管理界面
    "django.contrib.auth",  # 用户认证系统，包括用户和组的管理，权限等
    "django.contrib.contenttypes",  # 内容类型框架，用于动态关联模型和内容
    "django.contrib.sessions",  # 会话框架，用于处理用户会话
    "django.contrib.messages",  # 消息框架，用于在请求之间传递消息
    "django.contrib.staticfiles",  # 管理静态文件，比如CSS、JavaScript和图片
    "index.apps.IndexConfig",
    "D_URL.apps.DUrlConfig",
    "D_FBV.apps.DFbvConfig",
    "D_SQL.apps.DSqlConfig"  # 这是您项目中自定义的应用，IndexConfig 是该应用的配置类
]

# 中间件设置
MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",  # 安全中间件，提供安全相关的功能，如HTTP头部的安全增强。
    "django.contrib.sessions.middleware.SessionMiddleware",  # 会话中间件，负责管理用户的会话信息。
    # 添加中间件
    "django.middleware.locale.LocaleMiddleware",  # 本地化中间件，负责处理用户请求的本地化。
    "django.middleware.common.CommonMiddleware",  # 通用中间件，处理请求和响应的一些通用功能，如请求路径的规范化。
    "django.middleware.csrf.CsrfViewMiddleware",  # CSRF（跨站请求伪造）中间件，用于保护网站免受CSRF攻击。
    "django.contrib.auth.middleware.AuthenticationMiddleware",  # 认证中间件，用于处理用户的认证状态。
    "django.contrib.messages.middleware.MessageMiddleware",  # 消息中间件，负责处理用户的临时消息。
    "django.middleware.clickjacking.XFrameOptionsMiddleware",  # X-Frame-Options中间件，用于防止点击劫持攻击。
]

# 根URL设置
ROOT_URLCONF = "MyDjango.urls"

# 模板设置
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",  # 指定模板引擎为 Django 的模板后端。
        "DIRS": [BASE_DIR / 'templates',
                 BASE_DIR / 'D_URL/templates'  # 指定模板搜索目录，这里使用了 BASE_DIR 变量和 'templates' 子目录。
                 ],  # 指定模板搜索目录，这里使用了 BASE_DIR 变量和 'templates' 子目录。
        "APP_DIRS": True,  # 指示 Django 在每个已安装的应用目录中的 'templates' 子目录内查找模板文件。
        "OPTIONS": {
            "context_processors": [  # 定义上下文处理器列表，它们会在渲染模板时自动注入额外的变量。
                "django.template.context_processors.debug",  # 在开发模式下，向模板上下文添加调试信息。
                "django.template.context_processors.request",  # 向模板上下文添加当前的 HTTP 请求对象。
                "django.contrib.auth.context_processors.auth",  # 向模板上下文添加当前的用户认证信息。
                "django.contrib.messages.context_processors.messages",  # 向模板上下文添加模板消息，用于显示用户通知。
            ],
        },
    },
]

# WSGI应用设置
WSGI_APPLICATION = "MyDjango.wsgi.application"  # WSGI应用

# 数据库设置
# 详细信息，请访问 https://docs.djangoproject.com/en/5.0/ref/settings/#databases

DATABASES = {
     "default": {
         "ENGINE": "django.db.backends.sqlite3",   # 数据库引擎SQlite3
         "NAME": BASE_DIR / "db.sqlite3",
     }
}

# DATABASES = {
#     "default": {
#         "ENGINE": "django.db.backends.mysql",  # 数据库引擎MySQl
#         # 配置my.cnf文件
#         "OPTIONS": {'read_default_file': str(BASE_DIR / 'my.cnf')}
#     }
# }

# # 多个数据库的连接方式
# DATABASES = {
#     "default": {
#         "ENGINE": "django.db.backends.mysql",   # 数据库引擎MySQL
#         "NAME": "MyDjango",   # 数据库名称
#         "USER": "root",    # 用户名
#         "PASSWORD": "<PASSWORD>",    # 密码
#         "HOST": "127.0.0.1",    # 主机地址
#         "PORT": "3306",    # 端口号
#     },
#     "db2": {
#         "ENGINE": "django.db.backends.sqlite3",   # 数据库引擎SQlite3
#         "NAME": BASE_DIR / "db.sqlite3",   # 数据库路径
#     }
# }


# 密码验证
# 详细信息，请访问 https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",  # 用户属性相似性验证
    },
    {
        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",  # 最小长度验证
    },
    {
        "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",  # 常用密码验证
    },
    {
        "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",  # 数字密码验证
    },
]

# 国际化
# 详细信息，请访问 https://docs.djangoproject.com/en/5.0/topics/i18n/

LANGUAGE_CODE = "en-us"  # 默认语言，中文：zh-hans

TIME_ZONE = "UTC"  # 默认时区，北京时间：Asia/Shanghai

USE_I18N = True

USE_TZ = True

# 静态文件（CSS，JavaScript，图片）
# 详细信息，请访问 https://docs.djangoproject.com/en/5.0/howto/static-files/

STATIC_URL = "static/"

# 资源集合
# 设置根目录的静态资源文件夹static
STATICFILES_DIRS = [BASE_DIR / "static",
                    # 设置App(index)的静态资源文件夹Mystatic,
                    BASE_DIR / "index/Mystatic",
                    BASE_DIR / "D_URL/Mystatic",
                    ]

# 默认的主键字段类型
# 详细信息，请访问 https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"  # 主键字段类型

# 设置媒体路由地址信息
MEDIA_URL = "media/"
# 获取media文件夹的完整路径信息
MEDIA_ROOT = BASE_DIR / "media"

# 配置文件数据的临时存放文件夹，temp
FILE_UPLOAD_TEMP_DIR = BASE_DIR / "temp"

# 判断文件大小的条件
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 1024 * 1024

# 设置文件上传的处理过程
FILE_UPLOAD_HANDLERS = [
    "MyDjango.handler.myFileUploadHandler",
]


